package com.wande.dataplatform.filecollection.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.filecollection.domain.bo.CollectionRuleBo;
import com.wande.dataplatform.filecollection.domain.bo.CollectionTaskBo;
import com.wande.dataplatform.filecollection.domain.vo.CollectionRuleVo;
import com.wande.dataplatform.filecollection.domain.vo.CollectionTaskVo;
import com.wande.dataplatform.filecollection.domain.vo.FileRecordVo;

/**
 * 文件采集服务接口
 *
 * @author wande
 */
public interface IFileCollectionService {

    /**
     * 创建采集规则
     *
     * @param bo 采集规则业务对象
     * @return 规则ID
     */
    Long createRule(CollectionRuleBo bo);

    /**
     * 更新采集规则
     *
     * @param bo 采集规则业务对象
     */
    void updateRule(CollectionRuleBo bo);

    /**
     * 删除采集规则
     *
     * @param id 规则ID
     */
    void deleteRule(Long id);

    /**
     * 启用采集规则
     *
     * @param id 规则ID
     */
    void enableRule(Long id);

    /**
     * 禁用采集规则
     *
     * @param id 规则ID
     */
    void disableRule(Long id);

    /**
     * 查询采集规则详情
     *
     * @param id 规则ID
     * @return 采集规则视图对象
     */
    CollectionRuleVo getRule(Long id);

    /**
     * 查询采集规则列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 采集规则列表
     */
    TableDataInfo<CollectionRuleVo> listRules(CollectionRuleBo bo, PageQuery pageQuery);

    /**
     * 手动触发采集任务
     *
     * @param ruleId 规则ID
     * @return 任务ID
     */
    Long triggerTask(Long ruleId);

    /**
     * 停止采集任务
     *
     * @param taskId 任务ID
     */
    void stopTask(Long taskId);

    /**
     * 重跑采集任务
     *
     * @param taskId 任务ID
     * @return 新任务ID
     */
    Long retryTask(Long taskId);

    /**
     * 查询采集任务详情
     *
     * @param taskId 任务ID
     * @return 采集任务视图对象
     */
    CollectionTaskVo getTask(Long taskId);

    /**
     * 查询采集任务列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 采集任务列表
     */
    TableDataInfo<CollectionTaskVo> listTasks(CollectionTaskBo bo, PageQuery pageQuery);

    /**
     * 查询文件记录列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 文件记录列表
     */
    TableDataInfo<FileRecordVo> listFileRecords(CollectionTaskBo bo, PageQuery pageQuery);

    /**
     * 查询文件记录详情
     *
     * @param id 文件记录ID
     * @return 文件记录视图对象
     */
    FileRecordVo getFileRecord(Long id);

    /**
     * 下载文件
     *
     * @param id 文件记录ID
     * @return 文件下载URL
     */
    String downloadFile(Long id);

    /**
     * 查询任务统计信息
     *
     * @param ruleId 规则ID（可选）
     * @return 统计信息
     */
    java.util.Map<String, Object> getTaskStatistics(Long ruleId);

    /**
     * 查询任务执行趋势
     *
     * @param ruleId 规则ID（可选）
     * @param days   天数
     * @return 趋势数据
     */
    java.util.List<java.util.Map<String, Object>> getTaskTrend(Long ruleId, Integer days);
}
